package br.com.java.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;

@Controller
public class BackupDataBase {
	
	private static Logger LOGGER = Logger.getLogger("BackupDataBase");
	
	public static String gerarDumpDatabase() throws IOException{
		
		//não funcionou
//		FacesContext context = FacesContext.getCurrentInstance();
//		String caminho = "\""+context.getExternalContext().getRealPath("\\..\\..\\temp")+System.getProperty("file.separator")+"\"";
		
		//funcionou
		String caminho = System.getProperty("user.home")+System.getProperty("file.separator")+"temp"+System.getProperty("file.separator");
		
		File caminhoFile = new File(caminho);
		if(!caminhoFile.exists()){
			caminhoFile.mkdir();
		}
		
		String arquivo = caminho + "gemepde"+System.currentTimeMillis()+".sql";
		
		//Fazer variável de ambiente para diretório do MySQL afim de poder realizar o comando de qualquer lugar.
//		String comando = "cmd.exe /c mysqldump -uroot -proot -h localhost gemepdedb > " + arquivo;
		
		String username = "java"; 
		String password = "secret";
		
		String database = "gemepdedb";
		
		String executeCmd = "mysqldump -u" + username + " -p" + password + " --add-drop-database -B " + database + " -r " + arquivo;
		
		Process processo = null;
		try {
			processo = Runtime.getRuntime().exec(executeCmd);
			int processComplete =  processo.waitFor();
			
			if (processComplete == 0) {
				LOGGER.debug("Backup created successfully");
			} else {
				LOGGER.debug("Could not create the backup");
			}
		} catch (InterruptedException e) {
			LOGGER.error("Erro ao executar processo: " + e);
		}
		
//		String linha = "";
//		BufferedReader reader = new BufferedReader(new FileReader(arquivo));
//		
//		while ((linha = reader.readLine()) != null){
//			LOGGER.debug(linha);
//		}
		
//		InputStream in = processo.getInputStream();  
//		in = new BufferedInputStream(in);
//		FileOutputStream out = new FileOutputStream(arquivo);  
		  
//		int b;  
//		  
//		while((b = in.read())>-1){  
//		   out.write(b);  
//		}
//		
//		in.close();  
//		out.close(); 
		processo.destroy();
		
		return arquivo;
	}
	
//	public static void apagarArquivo (String arquivo) throws IOException {
//		File toDelete = new File(arquivo);
//		
//		if (toDelete.exists()){ 
//			LOGGER.info("Removendo : " + toDelete);
//			
//			Process processo = Runtime.getRuntime().exec("cmd.exe del /F /Q " + toDelete);
//			try {
//				processo.waitFor();
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//				LOGGER.error(e.getMessage());
//			}
//		}
//	}

}
